//
//  DogExpressBridge.m
//  UnityFramework
//  H5广告逻辑规则说明
//  - 不管是激励还是插屏，如果没配置H5链接就会直接触发Max回调
//  -
//  激励广告：有倒计时，等待计时结束后关闭广告会触发成功回调，计时未完成就点击关闭按钮会触发失败回调
//  -
//  插屏广告：这块有BUG，如果H5没有配置的情况下，将不会调用任何回调，所以Unity端就不要主动调用播放H5的广告了
//

#import "DataEyeSDK/DataEyeSDK.h"
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import "DataEyeSDKHelper.h"
#import <Foundation/Foundation.h>
#import "CustomAppController.h"

//---------------H5相关-----------------------
// 上报h5max revenue 入参为json字符串 格式为{"revenue":0.999}
// extern "C" void report(const char *val) {
//     NSString *str = [NSString stringWithCString:val
//                                        encoding:NSUTF8StringEncoding];
//     [((CustomAppController*)GetAppController()).h5 setReData:str];
// }

// // 展示激励广告
// extern "C" void showRewardAd() {
// //    NSLog(@"调用了DogExpressBridge的showRewardAd（广告）");
//     [((CustomAppController*)GetAppController()).h5
//         showRewardAD:^{
// //          NSLog(@"原生：展示MAX的激励（广告）");
//           // 展示max reward ad
//           UnitySendMessage("NativeMsgReceiver", "ShowMaxRewardAd", "");
//         }
//         successFun:^{
// //          NSLog(@"原生：展示自己的激励（广告）展示成功");
//           // 自己的激励广告成功回调
//           UnitySendMessage("NativeMsgReceiver", "ShowSelfRewardAdSuccess",
//                            "原生触发");
//         }
//         failedFun:^{
// //          NSLog(@"原生：展示自己的激励（广告）展示失败，中途关闭或者没配置");
//           // 自己的激励广告失败回调
//           UnitySendMessage("NativeMsgReceiver", "ShowSelfRewardAdFailed",
//                            "原生触发");
//         }];
// }

// // 主动展示自己的激励广告
// extern "C" void showSelfRewardAd() {
//     NSLog(@"原生：Unity主动发起展示自己的激励（广告）");
//     [((CustomAppController*)GetAppController()).h5
//         showRewardAdIM:^{
// //          NSLog(@"原生：Unity主动发起展示自己的激励（广告）展示成功");
//           // 自己的广告成功回调
//           UnitySendMessage("NativeMsgReceiver", "ShowSelfRewardAdSuccess",
//                            "Unity触发");
//         }
//         failedFun:^{
// //          NSLog(@"原生：Unity主动发起展示自己的激励（广告）展示失败，中途关闭或者没配置");
//           // 自己的广告失败回调
//           UnitySendMessage("NativeMsgReceiver", "ShowSelfRewardAdFailed",
//                            "Unity触发");
//         }];
// }

// // 主动展示自己的插屏广告
// extern "C" void showSelfIntAd() {
// //    NSLog(@"原生：Unity主动发起展示自己的插屏（广告）");
//     [((CustomAppController*)GetAppController()).h5 showIntADIM:^{
//       // 自己的广告完成回调
//       UnitySendMessage("NativeMsgReceiver", "ShowSelfIntAdSuccess", "Unity触发");
//     }];
// }

// // 展示插屏广告
// // 由Unity调用，该方法会通过特定算法来最终决定来播放自己的广告还是播放Max广告
// extern "C" void showIntAd() {
//     NSLog(@"调用了DogExpressBridge的showIntAd（广告）");
//     [((CustomAppController*)GetAppController()).h5
//         showIntAD:^{
//           // 展示max interstitial ad
//           UnitySendMessage("NativeMsgReceiver", "ShowMaxIntAd", "");
//         }
//         finishFun:^{
//           // 自己的Interstitial ad 完成回调
//           UnitySendMessage("NativeMsgReceiver", "ShowSelfIntAdSuccess",
//                            "原生触发");
//         }];
// }
//---------------H5相关-----------------------

//---------------BI相关-----------------------
extern "C" void setUserProperty(const char *value) {
    NSString *valueString = value ? [NSString stringWithUTF8String:value] : @"";
    NSLog(@"DataEyeSDK 用户属性 %@", valueString);
    [[DataEyeSDKHelper sharedInstance] sendUserSet:valueString];
}

extern "C" void sendBILog(const char *key, const char *value) {
    NSString *keyString = key ? [NSString stringWithUTF8String:key] : @"";
    NSString *valueString = value ? [NSString stringWithUTF8String:value] : @"";

    [[DataEyeSDKHelper sharedInstance] sendBILog:keyString value:valueString];
}
//---------------BI相关-----------------------

extern "C" bool hasSimCard() {
    CTTelephonyNetworkInfo *networkInfo = [[CTTelephonyNetworkInfo alloc] init];
    CTCarrier *carrier =
        [networkInfo serviceSubscriberCellularProviders].allValues.firstObject;
    NSString *carrierName = [carrier carrierName];
    NSLog(@"SIM卡 %@", carrierName!=nil ? @"YES" : @"NO");
    return (carrierName != nil);
}

extern "C" const char *getIdfa() {
    // 获取 IDFA 字符串
    NSString *idfaString = [((CustomAppController*)GetAppController()) idfa];

    // 将 NSString 转换为 UTF8 C 字符串并返回
    return [idfaString UTF8String];
}

extern "C" const char *getAppToken() {
    NSString *deviceToken = [((CustomAppController*)GetAppController()) deviceToken];
    return [deviceToken UTF8String];
}

extern "C" const char *getDeviceId() {
    NSString *deviceToken = [[DataEyeSDK sharedInstance] getDeviceId];
    return [deviceToken UTF8String];
}
